# 固件架构与源码 ```{admonition} 本文引用的文件 :class: note - `firmware/port/README.md` - `esp32s3/firmware/README.md` - `firmware/port/mpconfigport.h` - `firmware/port/Makefile` - `esp32s3/firmware/CMakeLists.txt` - `esp32s3/firmware/esp32_common.cmake` - `esp32s3/firmware/makeimg.py` - `esp32s3/firmware/main/CMakeLists.txt` - `esp32s3/firmware/boards/mpython_v3/mpconfigboard.cmake` - `esp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmake` - `esp32s3/firmware/boards/manifest.py` - `firmware/port/builtins/modmachine.c` - `firmware/port/builtins/modmusic.c` - `firmware/port/builtins/modnetwork.c` - `firmware/port/builtins/modradio.c` - `firmware/port/builtins/modframebuf.c` - `firmware/port/builtins/modmotion.c` - `firmware/port/builtins/modcodec.c` - `firmware/port/builtins/modxunfeiAI.c` - `firmware/port/modules/ssd1106.py` - `firmware/port/modules/neopixel.py` - `firmware/port/modules/mpython_ble/application/codexpad.py` - `firmware/port/file_system/siot.py` - `firmware/port/file_system/xunfei.py` - `firmware/port/file_system/yeelight.py` - `firmware/port/file_system/smartcamera.py` - `esp32s3/firmware/modules/radio.py` - `esp32s3/firmware/modules/ai_cloud.py` - `esp32s3/firmware/modules/xunfei.py` ``` ## 产品概述 mPython掌控板是基于ESP32双核芯片的MicroPython微控制器平台,面向K12创客教育场景。固件以MicroPython为核心,在FreeRTOS上运行,提供REPL、文件系统、GPIO/ADC/PWM/I2C/SPI等外设能力,以及WiFi/BLE网络、音频、传感器、显示等扩展能力。项目同时维护了两条产品线: - ESP32版(firmware/port):成熟稳定,内置大量C级模块与Python扩展库,适合教学与快速原型。 - ESP32-S3版(esp32s3/firmware):基于ESP-IDF v5.x + CMake构建,新增LVGL/AI视觉、GPS、心率等能力,支持多板型(mpython_v3、labplus_Ledong_v2等)。 核心价值在于“C层高性能+Python层易用性”的分层设计,既满足底层驱动性能需求,又通过Python模块降低开发门槛;构建流程清晰、板型配置解耦,便于二次开发与定制。 **章节来源** - `firmware/port/README.md:1-20` - `esp32s3/firmware/README.md:1-20` ## 核心业务流程 - 启动与初始化 - 引导程序加载分区表与应用镜像,FreeRTOS任务调度MicroPython VM。 - 端口层初始化串口REPL、内存管理、VFS、网络栈、蓝牙等。 - 用户代码执行 - Python脚本从冻结模块或LittleFS文件系统加载执行。 - 调用C级builtins(如machine/music/network)或直接使用Python模块(如neopixel/gui)。 - 硬件交互 - C驱动访问外设(I2C/SPI/ADC/PWM/TIMERS),暴露为Python接口。 - 传感器/音频/显示等通过drivers与modules组合实现。 - 构建与烧录 - ESP32版使用Makefile+ESP-IDF v3/v4;ESP32-S3版使用idf.py+CMake。 - 生成bootloader/partitions/app/VFS/语音模型等,合并为最终固件镜像。 ```text sequenceDiagram participant Boot as "引导程序" participant IDF as "ESP-IDF/FreeRTOS" participant MP as "MicroPython VM" participant Py as "用户Python脚本" participant Mod as "C级模块/Python模块" participant HW as "硬件外设" Boot->>IDF : 加载分区表与应用 IDF->>MP : 创建并启动VM任务 MP->>Py : 执行boot.py/main.py Py->>Mod : 调用machine/music/network等 Mod->>HW : 读写寄存器/中断/DMA HW-->>Mod : 数据/事件 Mod-->>Py : 返回结果/回调 Py-->>MP : 继续执行/退出 ``` **图表来源** - `esp32s3/firmware/esp32_common.cmake:126-180` - `esp32s3/firmware/makeimg.py:179-200` **章节来源** - `esp32s3/firmware/esp32_common.cmake:126-180` - `esp32s3/firmware/makeimg.py:179-200` ## 功能模块清单 - C级编译模块(builtins) - machine:GPIO/ADC/PWM/I2C/SPI/TouchPad/Timer等基础外设控制。 - music:兼容micro:bit的音乐播放与节拍控制。 - network/WiFi:WLAN连接与网络协议栈。 - radio:无线广播(ESP32版)。 - framebuf:帧缓冲绘制。 - motion:六轴传感器(加速度/陀螺仪/磁力计)。 - codec:音频编解码与录音/播放(ESP32版)。 - xunfeiAI:讯飞语音听写与TTS(ESP32版)。 - Python级模块(modules) - 设备驱动与工具:ssd1106(OLED)、neopixel(WS2812)、gui、logging、weather等。 - BLE高级库:mpython_ble(advertising/services/gatts等)。 - 网络与物联网:urequests、umqtt、tinywebio、siot等。 - 硬件驱动(drivers) - codec、mpu6050、rfid、rgbLED5x5等底层C驱动。 - 文件系统扩展(file_system) - siot(SIoT物联网)、yeelight(智能灯)、xunfei(讯飞AI)、smartcamera(AI摄像头)等应用级库。 ```text graph TB subgraph "C级模块(builtins)" M["modmachine"] U["modmusic"] N["modnetwork"] R["modradio"] F["modframebuf"] O["modmotion"] A["modcodec"] X["modxunfeiAI"] end subgraph "Python模块(modules)" S["ssd1106"] P["neopixel"] G["gui"] B["mpython_ble"] Q["urequests/umqtt"] end subgraph "驱动(drivers)" D1["codec"] D2["mpu6050"] D3["rfid"] D4["rgbLED5x5"] end subgraph "文件系统(file_system)" FS1["siot"] FS2["yeelight"] FS3["xunfei"] FS4["smartcamera"] end M --> D1 M --> D2 M --> D3 M --> D4 U --> M N --> M R --> M F --> M O --> M A --> M X --> N S --> M P --> M G --> F B --> N Q --> N FS1 --> N FS2 --> N FS3 --> N FS4 --> N ``` **图表来源** - `firmware/port/builtins/modmachine.c` - `firmware/port/builtins/modmusic.c` - `firmware/port/builtins/modnetwork.c` - `firmware/port/builtins/modradio.c` - `firmware/port/builtins/modframebuf.c` - `firmware/port/builtins/modmotion.c` - `firmware/port/builtins/modcodec.c` - `firmware/port/builtins/modxunfeiAI.c` - `firmware/port/modules/ssd1106.py` - `firmware/port/modules/neopixel.py` - `firmware/port/modules/mpython_ble/application/codexpad.py` - `firmware/port/file_system/siot.py` - `firmware/port/file_system/xunfei.py` - `firmware/port/file_system/yeelight.py` - `firmware/port/file_system/smartcamera.py` **章节来源** - `firmware/port/builtins/modmachine.c` - `firmware/port/builtins/modmusic.c` - `firmware/port/builtins/modnetwork.c` - `firmware/port/builtins/modradio.c` - `firmware/port/builtins/modframebuf.c` - `firmware/port/builtins/modmotion.c` - `firmware/port/builtins/modcodec.c` - `firmware/port/builtins/modxunfeiAI.c` - `firmware/port/modules/ssd1106.py` - `firmware/port/modules/neopixel.py` - `firmware/port/modules/mpython_ble/application/codexpad.py` - `firmware/port/file_system/siot.py` - `firmware/port/file_system/xunfei.py` - `firmware/port/file_system/yeelight.py` - `firmware/port/file_system/smartcamera.py` ## 数据与状态 - 构建配置与开关 - mpconfigport.h集中定义MicroPython特性开关(线程、VFS、SSL、WebREPL、FrameBuffer等)、内置模块注册、根指针与平台标识。 - 板级cmake(mpython_v3/labplus_Ledong_v2)指定目标芯片、SDKCONFIG默认集、源文件列表与冻结清单。 - 模块依赖关系 - builtins通过mpconfigport.h注册为内置模块名(machine/network/music/audio/radio等),被Python层直接import。 - modules与file_system作为扩展库,按需要冻结到固件或通过文件系统加载。 - 运行时状态 - FreeRTOS任务调度MicroPython VM;事件钩子处理挂起任务与异步事件。 - VFS将LittleFS挂载为内部文件系统,存储用户脚本与资源。 - NVS用于持久化配置(如传感器偏移、网络凭据等)。 ```text flowchart TD Start(["构建入口"]) --> Cfg["读取mpconfigport.h
与板级cmake"] Cfg --> Modules{"启用哪些模块?"} Modules --> |C级| Builtin["注册builtins
machine/network/music..."] Modules --> |Python| Freeze["冻结modules/file_system"] Builtin --> Build["编译链接"] Freeze --> Build Build --> Pack["makeimg.py打包
bootloader/partitions/app/VFS/语音模型"] Pack --> Flash["烧录到Flash"] Flash --> Run["FreeRTOS启动MicroPython"] Run --> App["执行用户脚本"] App --> State["运行时状态: VFS/NVS/网络/外设"] ``` **图表来源** - `firmware/port/mpconfigport.h:14-61` - `firmware/port/mpconfigport.h:180-218` - `esp32s3/firmware/boards/mpython_v3/mpconfigboard.cmake:1-44` - `esp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmake:1-50` - `esp32s3/firmware/makeimg.py:179-200` **章节来源** - `firmware/port/mpconfigport.h:14-61` - `firmware/port/mpconfigport.h:180-218` - `esp32s3/firmware/boards/mpython_v3/mpconfigboard.cmake:1-44` - `esp32s3/firmware/boards/labplus_Ledong_v2/mpconfigboard.cmake:1-50` - `esp32s3/firmware/makeimg.py:179-200` ## 关键约束与边界 - 构建系统差异 - ESP32版:Makefile + ESP-IDF v3/v4,需设置ESPIDF路径与工具链,支持BOARD变量选择板型。 - ESP32-S3版:idf.py + CMake,顶层CMakeLists.txt包含板级配置,支持variant与lockfiles校验。 - 板型与配置边界 - 每个板型有独立mpconfigboard.cmake与sdkconfig集合,避免交叉污染。 - 冻结清单(manifest.py)决定Python模块是否内嵌,影响固件体积与启动时间。 - 模块可用性边界 - ESP32版:audio/radio/xunfeiAI为C级内置;ESP32-S3版:radio迁移至Python模块,新增ai_cloud/xunfei等。 - 部分引脚/外设受限(如P4光线、P10声音),通用IO需避开专用功能。 - 运行时约束 - 堆栈与内存:MicroPython任务栈与Python堆大小有限,需关注大对象分配。 - 网络与BLE:需正确配置天线与RF参数,不同板型可能需额外初始化。 - 集成与扩展边界 - drivers与modules分层清晰,新增驱动应优先放入drivers,Python封装放在modules。 - file_system中的扩展库属于应用层,不纳入核心构建,按需部署。 **章节来源** - `firmware/port/Makefile:1-200` - `esp32s3/firmware/CMakeLists.txt:1-107` - `esp32s3/firmware/main/CMakeLists.txt:1-14` - `esp32s3/firmware/boards/manifest.py:1-16` - `esp32s3/firmware/modules/radio.py` - `esp32s3/firmware/modules/ai_cloud.py` - `esp32s3/firmware/modules/xunfei.py`